package org.example.myframework.frame.demo.delayQueue;

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.example.myframework.frame.common.redis.utils.RedisUtil;
import org.springframework.util.CollectionUtils;

import javax.annotation.Resource;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * 用于将任务发布到延迟队列，并推送到Redis中
 */
@Slf4j
public class MassMailTaskService {

    @Resource
    private RedisUtil redisUtil;

    private static final String MASS_TASK_KEY = "MASS_TASK_KEY";

    public void pushMassMailTaskQueue(MassMailTask mailTask) {
        Date startTime = mailTask.getStartTime();
        // 做时间校验
        if (startTime == null) {
            return;
        }
        if (startTime.before(new Date())) {
            return;
        }
        log.info("定时任务massTask{}加入队列", JSON.toJSONString(mailTask));
        // zAdd，使用redisUtil中的zset，存入到redis中
        // redisUtils.zAdd(MassMailTask, mailTask.getTaskId().toString(), startTime.getTime());
    }

    /**
     * 拉取值，通过定时任务去拉取会更合理，一分钟、半分钟去拉取，看是否有满足的值。
     * @return
     */
    public Set<Long> pullMassTaskQueue() {
        Set<String> taskIdSet = new HashSet<>();

        // taskIdSet = redisUtil.rangeByScore(MASS_TASK_KEY, 0, System.currentTimeMillis());
        if (CollectionUtils.isEmpty(taskIdSet)) {
            return Collections.emptySet();
        }
        // 在缓存中将值移除
        // redisUtil.removeZsetList(MASS_TASK_KEY, taskIdSet);
        return taskIdSet.stream()
                .map(n -> Long.parseLong(n)).collect(Collectors.toSet());
    }

}
